package com.jcfk.system.controller;

import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.jcfk.common.business.controller.BaseController;
import com.jcfk.common.business.log.annotation.RequestLogHeader;
import com.jcfk.common.web.domain.DataPage;
import com.jcfk.common.web.domain.ReqPageParam;
import com.jcfk.common.web.domain.RetPage;
import com.jcfk.common.web.domain.RetResult;
import com.jcfk.system.domain.dto.SysInternalMessageTypeDTO;
import com.jcfk.system.domain.po.SysInternalMessageType;
import com.jcfk.system.domain.query.SysMessageTypeQuery;
import com.jcfk.system.service.SysInternalMessageTypeService;
import io.swagger.annotations.Api;
import lombok.NonNull;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import javax.validation.Valid;
import java.util.List;

import static com.jcfk.common.core.utils.BeanUtils.convertList;

/**
 * 系统内部消息类型 服务接口
 */
@Api(tags = {"消息类型管理"})
@RestController
@RequestMapping("/SysMessageType")
public class SysInternalMessageTypeController extends BaseController {

    @Autowired
    private SysInternalMessageTypeService sysInternalMessageTypeService;

    /**
     * 消息类型管理 获取所有可用消息类型列表
     *
     * @return
     */
    @PostMapping("getMessageTypes")
    public RetResult<List<SysInternalMessageTypeDTO>> getMessageTypes() {
        QueryWrapper<SysInternalMessageType> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("enabled", 1).eq("deleted", 0);

        List<SysInternalMessageType> typeDTOS = sysInternalMessageTypeService.list(queryWrapper);

        return RetResult.ok(convertList(typeDTOS, SysInternalMessageTypeDTO.class));
    }


    /**
     * 消息类型管理 查询消息类型列表(分页)
     *
     * @param requestParam
     * @return
     */
    @PostMapping("/page")
    public RetPage<SysInternalMessageTypeDTO> queryByPage(@RequestBody ReqPageParam<SysMessageTypeQuery> requestParam) {

        DataPage<SysInternalMessageTypeDTO> page = new DataPage<>((long) requestParam.getCurrent(), (long) requestParam.getSize(), requestParam.getSort().getOrderItem(), SysInternalMessageTypeDTO.class);

        return new RetPage<>(sysInternalMessageTypeService.queryManagePage(page, requestParam.getData()));
    }


    /**
     * 消息类型管理  添加/更新
     *
     * @param dto
     * @return
     */
    @RequestLogHeader(modular = "消息类型管理", businessType = "保存")
    @PostMapping("/save")
    @ResponseBody
    public RetResult<?> save(@NonNull @RequestBody @Valid SysInternalMessageTypeDTO dto) {
        
        if (StrUtil.isEmpty(dto.getId())) {
            return RetResult.ok(sysInternalMessageTypeService.insert(dto));
        } else {
            return RetResult.ok(sysInternalMessageTypeService.update(dto));
        }
    }


    /**
     * 消息类型管理  删除
     *
     * @param dto 要删除的消息
     * @return
     */
    @RequestLogHeader(modular = "消息类型管理", businessType = "删除")
    @PostMapping("delete")
    public RetResult<?> logicDelete(@RequestBody SysInternalMessageTypeDTO dto) {
        return RetResult.ok(sysInternalMessageTypeService.logicDelete(dto));
    }

    /**
     * 消息类型管理  删除
     *
     * @param dto 要删除的消息
     * @return
     */
    @RequestLogHeader(modular = "消息类型管理", businessType = "删除")
    @PostMapping("deleteList")
    public RetResult<?> deleteList(@RequestBody SysInternalMessageTypeDTO dto) {
        return RetResult.ok(sysInternalMessageTypeService.logicDeleteList(dto));
    }


    /**
     * 消息类型管理  详情
     *
     * @param id
     * @return
     */
    @GetMapping("/get/{id}")
    @ResponseBody
    public RetResult<SysInternalMessageTypeDTO> get(@NonNull @PathVariable("id") String id) {
        return RetResult.ok(sysInternalMessageTypeService.get(id));
    }

}
